//
//  LYQUserAccount.swift
//  SwiftWeibo
//
//  Created by 刘英群 on 2017/1/16.
//  Copyright © 2017年 刘英群. All rights reserved.
//

import UIKit

fileprivate let accountFile: NSString = "useraccount.json"

//用户账户信息
class LYQUserAccount: NSObject {

    //访问令牌
    // 使用一个函数封装AFN的GET POST请求
    // 访问令牌， 所有网络请求，都基于此令牌（登录除外）
    /// 为了保护用户安全，token是有时限的，默认用户是三天
    // 模拟Token过期 -> 服务器返回的状态吗是403
    var access_token:String?
    
    // 用户代号 微博记录的用户信息,用户微博id
    var uid: String?
    
    // 过期日期
    var expiresDate: Date?
    
    // access_token的生命日期，单位秒
    // 开发者 5年，每次登陆之后，都是五年
    // 使用者 3天, 会从第一次登录递减
    var expires_in: TimeInterval = 0 {
        
        didSet {
            expiresDate = Date(timeIntervalSinceNow: expires_in)
        }
    }
    
   
    
    // 用户昵称
    var screen_name: String?
    // 用户头像地址（大图）,180*180像素
    var avatar_large: String?
    
    override var description: String{
        return yy_modelDescription()
    }
    
    override init() {
        
        super.init()
        
        //1.从磁盘加载保存的文件 -> 字典
        guard let path = accountFile.cz_appendDocumentDir(),
            let data = NSData(contentsOfFile: path),
            let dict = try? JSONSerialization.jsonObject(with:data as Data, options: []) as? [String: Any] else {
                return
        }
        
        //2.使用字典设置属性值
        yy_modelSet(with: dict ?? [:])
        
        print("从沙盒记载用户信息 \(self)")
        
        //3.判断token是否过期
        
        //测试过期日期
//        expiresDate = Date(timeIntervalSinceNow: -3600 * 24)
        
        if expiresDate?.compare(Date()) != .orderedDescending {
            print("账户过期")
            
            //清空token
            access_token = nil
            uid = nil
            
            //删除账户文件
            _ = try? FileManager.default.removeItem(atPath: path)
        }
    }
    
    /**
     1.偏号设置 存小的
     2.沙盒 - 归档/plist/json
     3.数据库（FMDB、CoreData）
     4.钥匙串访问 存小的 - 需要使用框架 SSKeychain
     **/
    func saveAccount() {
        
        // 1.模型转字典
        var dict = self.yy_modelToJSONObject() as? [String: Any] ?? [:]
        
        // 需要删除 expires_in 值
        dict.removeValue(forKey: "expires_in")
        // 2.字典序列化 data
        guard let data = try? JSONSerialization.data(withJSONObject: dict, options: []),
        let filePath = accountFile.cz_appendDocumentDir()
            else{
            
                return
        }
        
        // 3.写入磁盘
        (data as NSData).write(toFile: filePath, atomically: true)
        print("用户账户保存成功\(filePath)")
    }
}
